package tag

import (
	"errors"
	"web/global"
	"web/models"
)

// TagService 标签服务
type TagService struct {
}

// NewTag 创建标签服务实例
func NewTag() *TagService {
	return &TagService{}
}

// Get 获取单个标签
func (s *TagService) Get(id uint) (*models.Tag, error) {
	var tag models.Tag
	err := global.DB.First(&tag, id).Error
	if err != nil {
		return nil, err
	}
	return &tag, nil
}

// Gets 获取标签列表
func (s *TagService) Gets() ([]*models.Tag, error) {
	var tags []*models.Tag
	err := global.DB.Find(&tags).Error
	if err != nil {
		return nil, err
	}
	return tags, nil
}

// Create 创建标签
func (s *TagService) Create(tag *models.Tag) error {
	if tag == nil {
		return errors.New("标签数据不能为空")
	}
	return global.DB.Create(tag).Error
}

// Update 更新标签
func (s *TagService) Update(id uint, tag *models.Tag) error {
	if tag == nil {
		return errors.New("标签数据不能为空")
	}
	return global.DB.Model(&models.Tag{}).Where("id = ?", id).Updates(tag).Error
}

// Delete 删除标签
func (s *TagService) Delete(id uint) error {
	return global.DB.Delete(&models.Tag{}, id).Error
}

// ExistByName 检查标签名称是否存在
func (s *TagService) ExistByName(name string) (bool, error) {
	var count int64
	err := global.DB.Model(&models.Tag{}).Where("name = ?", name).Count(&count).Error
	if err != nil {
		return false, err
	}
	return count > 0, nil
}

// GetByName 根据名称获取标签
func (s *TagService) GetByName(name string) (*models.Tag, error) {
	var tag models.Tag
	err := global.DB.Where("name = ?", name).First(&tag).Error
	if err != nil {
		return nil, err
	}
	return &tag, nil
}
